
/*****************************************************************************
 * file  : systask.c
 * creat : apleilx
 * note :  除初始化外，禁止该任务及其子程序使用含有阻塞的功能，包括数据存储，USB操作等等
 * data  : 2019/07/02
 *****************************************************************************/
#include "bsp.h"
#include "os_obj.h"
#include "framework.h"
#include "file_afat_tab.h"

#include "bsp_api.h"
#include "nor_cmd.h"

#include "lut/nand_lut.h"

#include "ff.h"
#include "fat_file_opt.h"
#include "simp_fat_update.h"

/*****************************************************************************
 * @brief   function
 *****************************************************************************/
uint8_t simp_fat_update_check(char *fil_name);
uint8_t simp_fat_update_exec(char *fil_name);

/*****************************************************************************
 * @brief   local var
 *****************************************************************************/
sfat_ext_fil_type efat;
extern FIL file;
extern FATFS fs;

// 此数组为 key_code_sim 代码二进制值
// 作为固定键值，可以伪装为程序
const uint16_t ase_key_src[] = {
	0xf04f, 0x5000, 0x6801, 0x07ca,
	0xd500, 0xbf00, 0x6841, 0x078a,
	0xd500, 0xbf00, 0x6881, 0x074a,
	0xd500, 0xbf00, 0x68c0, 0x0701,
	0xd500, 0xbf00, 0x4770};

const uint8_t ase_key_ext[32] = {0};

/*****************************************************************************
 * @brief   simp_fat_update_manage.
 * @param   none
 * @return  none
 *****************************************************************************/
void simp_fat_update_manage(const char *mergefile, uint8_t chk0_or_opt1)
{

	// 占用申请
	f_mount(&fs, "", 0);

	// 转驱动
	// f_chdrive("0:\0");

	// 配置
	efat.wr_block_size = 128 * 1024;
	efat.fsel = 0;
	efat.md5_en = 1;
	efat.sha_en = 1;

	// fil alloc
	efat.fil = malloc(sizeof(FIL));

	// check
	if (chk0_or_opt1)
		simp_fat_update_exec((char *)mergefile);
	else
		simp_fat_update_check((char *)mergefile);

	// fil realse
	free(efat.fil);

	f_mount(0, "", 0);
}
